package controllcivil.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

/**
 * Entidade responsavel por armazenar os valores referente a uma pessoa
 * juridica.
 * 
 * @author Rafael Altagnam
 * @version 1.0
 * 
 */
@javax.persistence.Entity(name = "PESSOA_JURIDICA")
public class PessoaJuridica extends Entity implements Serializable {

	private static final long serialVersionUID = 589673471439893247L;

	/**
	 * Atributo que referencia a {@link Pessoa}.
	 */
	@OneToOne(mappedBy = "pessoaJuridica", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	private Pessoa pessoa;

	/**
	 * Uma pessoa juridica pode fornecer varios materiais, por este motivo
	 * possuia uma lista de {@link FornecedorMaterial}.
	 */
	@OneToMany(mappedBy = "pessoaJuridica", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	private List<FornecedorMaterial> listaFornecedores;

	/**
	 * Atributo responsavel por armazenar o CNPJ da pessoa juridica.
	 */
	private String cnpj;

	/**
	 * Atributo responsavel por armazenar o nome fantasia da empresa.
	 */
	@Column(name = "nome_fantasia", length = 255)
	private String nomeFantasia;

	/**
	 * Construtor padrao.
	 */
	public PessoaJuridica() {

	}

	/**
	 * Construtor que recebe como parametro o ID da entidade.
	 * 
	 * @param id
	 */
	public PessoaJuridica(int id) {
		this.id = id;
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public String getCnpj() {
		return cnpj;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	public String getNomeFantasia() {
		return nomeFantasia;
	}

	public void setNomeFantasia(String nomeFantasia) {
		this.nomeFantasia = nomeFantasia;
	}

	public List<FornecedorMaterial> getListaFornecedores() {
		return listaFornecedores;
	}

	public void setListaFornecedores(List<FornecedorMaterial> listaFornecedores) {
		this.listaFornecedores = listaFornecedores;
	}

	@Override
	public String toString() {
		return "PessoaJuridica [ID = " + id + " nomeFantasia = " + nomeFantasia
				+ "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((cnpj == null) ? 0 : cnpj.hashCode());
		result = prime
				* result
				+ ((listaFornecedores == null) ? 0 : listaFornecedores
						.hashCode());
		result = prime * result
				+ ((nomeFantasia == null) ? 0 : nomeFantasia.hashCode());
		result = prime * result + ((pessoa == null) ? 0 : pessoa.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		PessoaJuridica other = (PessoaJuridica) obj;
		if (this == obj)
			return true;
		
		if (obj == null)
			return false;
		
		if (getClass() != obj.getClass())
			return false;
		
		if (other.getId() == this.id)
			return true;
		
		return false;
	
	}
	
	

}
